package com.ruoyi.system.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.common.core.domain.entity.SysUser;
import org.apache.ibatis.annotations.Select;

/**
 * 用户表 数据层
 *
 * @author ruoyi
 */
@Mapper
public interface SysUserMapper {
    /**
     * 根据条件分页查询用户列表
     *
     * @param sysUser 用户信息
     * @return 用户信息集合信息
     */
    public List<SysUser> selectUserList(SysUser sysUser);

    /**
     * 通过用户名查询用户
     *
     * @param userName 用户名
     * @return 用户对象信息
     */
    public SysUser selectUserByUserName(@Param("userName") String userName, @Param("userType") String userType);

    /**
     * 查找pc端用户（不包含小程序）
     *
     * @param userName 用户名
     * @return 用户对象信息
     */
    public SysUser selectSystemUser(@Param("userName") String userName);


    /**
     * 通过微信openid查询用户
     *
     * @param openId 微信openid
     * @return 用户对象信息
     */
    public SysUser selectUserByOpenId(@Param("openId") String openId, @Param("userType") String userType);

    /**
     * 通过用户ID查询用户
     *
     * @param userId 用户ID
     * @return 用户对象信息
     */
    public SysUser selectUserById(Long userId);

    @Select("select user_id userId,nick_name nickName, avatar from sys_user where user_id = #{userId}  ")
    public Map<String, Object> selectEasyUser(@Param("userId") Long userId);

    /**
     * 新增用户信息
     *
     * @param user 用户信息
     * @return 结果
     */
    public int insertUser(SysUser user);

    /**
     * 修改用户信息
     *
     * @param user 用户信息
     * @return 结果
     */
    public int updateUser(SysUser user);

    /**
     * 修改用户头像
     *
     * @param userName 用户名
     * @param avatar   头像地址
     * @return 结果
     */
    public int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar);

    /**
     * 重置用户密码
     *
     * @param userName 用户名
     * @param password 密码
     * @return 结果
     */
    public int resetUserPwd(@Param("userName") String userName, @Param("password") String password);

    /**
     * 升级为队长
     *
     * @param id 用户名
     * @return 结果
     */
    public int updateToTeamLeader(@Param("id") Long id, @Param("teamLeader") String teamLeader);

    /**
     * 通过用户ID删除用户
     *
     * @param userId 用户ID
     * @return 结果
     */
    public int deleteUserById(Long userId);

    /**
     * 批量删除用户信息
     *
     * @param userIds 需要删除的用户ID
     * @return 结果
     */
    public int deleteUserByIds(Long[] userIds);

    /**
     * 校验用户名称是否唯一
     *
     * @param userName 用户名称
     * @return 结果
     */
    public int checkUserNameUnique(@Param("userName") String userName);

    /**
     * 校验手机号码是否唯一
     *
     * @param phonenumber 手机号码
     * @return 结果
     */
    public SysUser checkPhoneUnique(@Param("phonenumber") String phonenumber, @Param("userType") String userType);

    /**
     * 校验email是否唯一
     *
     * @param email 用户邮箱
     * @return 结果
     */
    public SysUser checkEmailUnique(@Param("email") String email, @Param("userType") String userType);

    /**
     * 获取优惠券个数和可提现金额
     *
     * @param userId
     * @return
     */
    @Select(" select ifnull(log.num,0) num , profit.not_withdrawn notWithdrawn from sys_user user " +
            " left join edh_profit profit on user.user_id = profit.create_by " +
            " left join (select count(0) num , user_id from edh_coupon_log where status = 0  group by user_id ) log on log.user_id = user.user_id " +
            " where user.user_id = #{userId}")
    List<Map<String, Object>> personalAsset(@Param("userId") Long userId);

    @Select("select count(0) from sys_user where invitees = #{userId}")
    Integer getMyInvitees(@Param("userId") Long userId);

    @Select("select count(0) from sys_user where invitees = #{userId}")
    Integer selectMyInvitees(@Param("userId") Long userId);

    /**
     * 根据openId查询用户信息
     *
     * @param openId
     * @return
     * @author HuAnze
     * @date 2021/2/6
     */
    SysUser selectByOpenId(String openId);

    /**
     * 根据手机号绑定openId
     *
     * @param phone
     * @param openId
     * @return
     * @author HuAnze
     * @date 2021/2/6
     */
    int updateUserByPhone(@Param("phone") String phone, @Param("openId") String openId);

    /**
     * 根据手机号查询用户
     *
     * @param openId
     * @param appUser
     * @return
     */
    SysUser selectUserByPhoneNumber(@Param("phoneNumber") String phoneNumber, @Param("userType") String userType);
}
